/**
 * 在这里定义和用户相关的路由处理函数，供 /router/user.js 模块进行调用
 */

const db = require('../db/index')

const bcrypt = require('bcryptjs')

// 用这个包来生成 Token 字符串
const jwt = require('jsonwebtoken')

// 导入配置文件
const config = require('../config')


// 注册用户的处理函数
exports.regUser = (req,res) => {
    const userInfo = req.body
    /* console.log(userInfo); */
    // 检测用户名或密码是否为空
    if(!userInfo.username || !userInfo.password) {
        /* return res.send({
            status:1,
            msg:'用户名或密码不能为空'
        }) */
        return res.cc('用户名或密码不能为空')
    }

    // 检测用户名是否被占用
    const sqlStr = `select * from ev_users where username=?`
    db.query(sqlStr,userInfo.username,(err,results) => {
        if(err) {
            /* return res.send({
                status:1,
                msg:err.message
            }) */
            return res.cc(err)
        }
        if(results.length > 0) {
           /*  return res.send({
                status:1,
                msg:'用户名被占用'
            }) */
            return res.cc('用户名被占用')
        }
    })

    /* res.send('注册') */
    userInfo.password = bcrypt.hashSync(userInfo.password,10)       // 密码加密
    /* console.log(userInfo) */

    // 插入新用户
    const insetUser = 'insert into ev_users set ?'
    db.query(insetUser,{ username: userInfo.username, password: userInfo.password },(err,results) => {
        if(err) {
            /* return res.send({
                status:1,
                msg:err.message
            }) */
            return res.cc(err)
        }
        if(results.affectedRows !== 1) {
            /* return res.send({
                status:1,
                msg:'注册失败'
            }) */
            return res.cc('注册失败')
        }
        /* res.send('注册成功') */
        res.cc('注册成功',0)
    })

}

// 登录的处理函数
exports.login = (req, res) => {
    const userInfo = req.body

    const sql = 'select * from ev_users where username=? '
    db.query(sql, userInfo.username, (err, results) => {
        if (err) {
            return res.cc(err)
        }
        if (results.length !== 1) {
            return res.cc('登录失败')
        }
        // 密码对比
        const compareResult = bcrypt.compareSync(userInfo.password, results[0].password)
        if (!compareResult) {
            return res.cc('登录失败')
        }

        // 剔除个人敏感信息
        const user = {
            ...results[0],
            password:'',
            user_pic:''
        }
        /* console.log(user); */

        const tokenStr = jwt.sign(user,config.jwtSecretKey,{
            expiresIn:'10h'
        })
        res.send({
            status: 0,
            message: '登录成功！',
            // 为了方便客户端使用 Token，在服务器端直接拼接上 Bearer 的前缀
            token: 'Bearer ' + tokenStr,
          })
    })
}